package com.biodiv.miracle.event.core;

import com.biodiv.miracle.event.EventObject;

import java.util.List;

/**
 * @Author: tianquan
 * @date: 2024-10-12  16:06
 * @Description: EventSource接口定义了事件源的行为，它允许事件监听器注册到事件源，并支持事件的发布
 */
public interface EventSource {

    /**
     * 向事件源添加一个事件监听器
     * 监听器将开始接收来自此事件源的事件通知
     *
     * @param listener 要添加的事件监听器，泛型表示监听器可以监听任何类型的事件
     */
    void addEventListener(EventListener<?> listener);

    /**
     * 向事件源添加多个事件监听器
     * 这些监听器将开始接收来自此事件源的事件通知
     *
     * @param listeners 要添加的事件监听器列表，所有监听器将被批量添加
     */
    void addEventListeners(List<EventListener> listeners);

    /**
     * 从事件源移除一个事件监听器
     * 监听器将不再接收来自此事件源的事件通知
     *
     * @param listener 要移除的事件监听器，泛型表示可以移除任何类型的事件监听器
     */
    void removeEventListener(EventListener<?> listener);

    /**
     * 发布一个事件到所有已注册的事件监听器
     * 所有对该事件感兴趣的监听器都将接收到此事件的通知
     *
     * @param eventObject 要发布的事件对象，包含事件的相关信息
     */
    void publishEvent(EventObject eventObject);

}

